# -*- coding: utf-8 -*-
# @Author: Jerry
# @Date:   2022-02-21 14:46:12
# @Last Modified by:   Jerry
# @Last Modified time: 2022-02-21 17:20:45

# http://www.woshicver.com/
# 了解将轨迹栏固定到OpenCV窗口
# 您将学习以下功能：cv.getTrackbarPos，**cv.createTrackbar**等。

# 在这里，我们将创建一个简单的应用程序，以显示您指定的颜色。
# 您有一个显示颜色的窗口，以及三个用于指定B、G、R颜色的跟踪栏。
# 滑动轨迹栏，并相应地更改窗口颜色。默认情况下，初始颜色将设置为黑色。

# 对于cv.getTrackbarPos()函数，
# 第一个参数是轨迹栏名称，
# 第二个参数是它附加到的窗口名称，
# 第三个参数是默认值，
# 第四个参数是最大值，
# 第五个是执行的回调函数每次跟踪栏值更改。
# 回调函数始终具有默认参数，即轨迹栏位置。

# 轨迹栏的另一个重要应用是将其用作按钮或开关。
# 默认情况下，OpenCV不具有按钮功能。
# 因此，您可以使用轨迹栏获得此类功能。

# 以下应用程序中，我们创建了一个开关，只有在该开关为ON的情况下，
# 该应用程序才能在其中运行，否则屏幕始终为黑色。

import numpy as np
import cv2 as cv

def nothing(x):
	pass

# **********
# 创建一个黑色的图像，一个窗口
img = np.zeros((512,512,3),np.uint8) #参数含义 画布width x height = 512x512，每个点的采用bgr 3原色
cv.namedWindow('image')

# **********
# 创建颜色变化的轨迹栏
# cv.createTrackbar创建滑动块
# 参数列表：滑块命名，滑块所在的window名，滑块的取值范围，滑块的回调函数
cv.createTrackbar('R','image',0,255,nothing)
cv.createTrackbar('G','image',0,255,nothing)
cv.createTrackbar('B','image',0,255,nothing)

# **********
# 为 ON/OFF 功能创建开关
switch = '0:OFF \n1:ON'
cv.createTrackbar(switch,'image',0,1,nothing)

# **********
# 获取滑块的值，并改变 img 画布的底色
while True:
	cv.imshow('image',img)
	k = cv.waitKey(1) & 0xFF
	if k == 0x1B:
		break
	r = cv.getTrackbarPos('R','image') # 获取滑动块的值
	g = cv.getTrackbarPos('G','image')
	b = cv.getTrackbarPos('B','image')
	s = cv.getTrackbarPos(switch,'image')
	if s==0:
		img[:]=0
	else:
		img[:]=[b,g,r]

# **********
# 释放窗口
cv.destroyAllWindows()













